#pragma once

#include "pins_config.h"
#include "NRF.h"
#include <ESP32Servo.h>  // 舵机角度和pwm调速的库


struct TANK_KVS {
  // 前端上面两个按键
  bool L_up = HIGH;
  bool R_up = HIGH;

  // int8_t 是有符号char型 -128 到 127
  int8_t LX = 0;
  int8_t LY = 0;
  int8_t RX = 0;
  int8_t RY = 0;

  // 陀螺仪数据
  int8_t angleX = 0;  // -128 到 127
  int8_t angleY = 0;

  // 4个拨杆开关    // 左1 --- 左2 --- 右1 --- 右2
  int sw_L1 = HIGH;
  int sw_L2 = HIGH;
  int sw_R1 = HIGH;
  int sw_R2 = HIGH;

  // 电位器旋钮
  int8_t L_knob = 0;
  int8_t R_knob = 0;
};

class MotorControl {
private:
  int8_t _angle1 = 130;  // 舵机1默认角度
  int8_t _angle2 = 20;   // 舵机2默认角度
  int8_t _angle3 = 80;   // 舵机3默认角度
public:
  TANK_KVS tank_kvs;
  NRF nrf;

  Servo servo1;  // 叉臂舵机1
  Servo servo2;  // 叉臂舵机2
  Servo servo3;  // 叉臂舵机3

  bool left_sw = false;
  bool right_sw = false;

  MotorControl();

  void init();
  // 读取收到的数据并写入tank_kvs
  void read();
  // 控制舵机
  void loadServo();
  // 控制电机
  void loadMotor();
  void clearSw();
  // 前进
  void forward();
  // 后退
  void backward();
  // 左旋转
  void leftRotate();
  // 右旋转
  void rightRotate();
  // 左平移
  void leftTranslation();
  // 右平移
  void rightTranslation();
  // 停止
  void stop();
  // 刹车
  void brake();
  // 控制电机a
  void motor_a(int in1, int in2);
  // 控制电机b
  void motor_b(int in1, int in2);
  // 控制电机c
  void motor_c(int in1, int in2);
  // 控制电机d
  void motor_d(int in1, int in2);
};